package com.clyme.expediente.servicios;

import com.clyme.expediente.dao.EtapaDao;
import com.clyme.expediente.dao.ExpedienteDao;
import com.clyme.expediente.dao.LineaDao;
import com.clyme.expediente.dao.SedeDao;
import com.clyme.expediente.dao.TipoExpedienteDao;
import com.clyme.expediente.daoImpl.EtapaDaoImpl;
import com.clyme.expediente.daoImpl.ExpedienteDaoImpl;
import com.clyme.expediente.daoImpl.LineaDaoImpl;
import com.clyme.expediente.daoImpl.SedeDaoImpl;
import com.clyme.expediente.daoImpl.TipoExpedienteDaoImpl;
import com.clyme.expediente.entidad.Etapa;
import com.clyme.expediente.entidad.Expediente;
import com.clyme.expediente.entidad.LineaTrabajo;
import com.clyme.expediente.entidad.Sede;
import com.clyme.expediente.entidad.TipoExpediente;
import com.clyme.expediente.hibernate.HibernateConexion;
import com.clyme.expediente.utilitarios.IConexion;
import com.clyme.expediente.utilitarios.Utilitario;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Luis Alonso Ballena Garcia
 */
public class ExpedienteServicios {
    IConexion conexion;
    ExpedienteDao<Expediente> daoExpediente;
    LineaDao<LineaTrabajo> daoLinea;
    SedeDao<Sede> daoSede;
    TipoExpedienteDao<TipoExpediente> daoTipo;
    EtapaDao<Etapa> daoEtapa;

    public ExpedienteServicios() {
        conexion = new HibernateConexion();
        daoEtapa = new EtapaDaoImpl(conexion);
        daoSede = new SedeDaoImpl(conexion);
        daoTipo = new TipoExpedienteDaoImpl(conexion);
        daoLinea = new LineaDaoImpl(conexion);
        daoExpediente = new ExpedienteDaoImpl(conexion);
    }
    
    public Expediente obtenerExpediente(Integer id)
    {
        conexion.beginConexion();
        Expediente expediente = daoExpediente.buscarPorId(Expediente.class, id);
        conexion.closeConexion();
        return expediente;
    }
    
    public void registrarExpediente(Expediente expediente) {
        expediente.setHabilitado(Short.valueOf("1"));
        conexion.beginTransaccion();
        daoExpediente.agregar(expediente);
        conexion.closeTransaccion();
        Utilitario.enviarMensajeGlobalValido("Se ha registrado correctamente");
    }

    public void actualizarEtapa(Expediente expediente) {
        conexion.beginTransaccion();
        daoExpediente.actualizar(expediente);
        conexion.closeTransaccion();
        Utilitario.enviarMensajeGlobalValido("Se ha actualizado correctamente");
    }

    public void eliminarEtapa(Expediente expediente) {
        expediente.setHabilitado(Short.valueOf("1"));
        conexion.beginTransaccion();
        daoExpediente.actualizar(expediente);
        conexion.closeTransaccion();
        Utilitario.enviarMensajeGlobalValido("Se ha eliminado correctamente");
    }
    
    public List<Etapa> obtenerEtapas() {
        List<Etapa> etapas = new ArrayList<Etapa>();
        conexion.beginConexion();
        etapas = daoEtapa.obtenerTodosActivos(Etapa.class);
        conexion.closeConexion();
        return etapas;
    }
    
    public List<TipoExpediente> obtenerTipos()
    {
        conexion.beginConexion();
        List<TipoExpediente> tipos = new ArrayList<TipoExpediente>();
        tipos = daoTipo.obtenerTodosActivos(TipoExpediente.class);
        conexion.closeConexion();
        return tipos;
    }
    
    public List<Sede> obtenerSedes(){
        List<Sede> sedes = new ArrayList<Sede>();
        conexion.beginConexion();
        sedes = daoSede.obtenerTodosActivos(Sede.class);
        conexion.closeConexion();
        return sedes;
    }
    
    public List<LineaTrabajo> obtenerLineas()
    {
        List<LineaTrabajo> lineas = new ArrayList<LineaTrabajo>();
        conexion.beginConexion();
        lineas = daoLinea.obtenerTodosActivos(LineaTrabajo.class);
        conexion.closeConexion();
        return lineas;
    }
    
    public List<Expediente> obtenerTodos()
    {
        List<Expediente> lineas = new ArrayList<Expediente>();
        conexion.beginConexion();
        lineas = daoExpediente.obtenerTodosActivos(Expediente.class);
        conexion.closeConexion();
        return lineas;
    }
    
    
    
}
